OBJECT Codeunit 86831 File Encoding Management
{
  OBJECT-PROPERTIES
  {
    Date=03.09.14;
    Time=11:30:07;
    Modified=Yes;
    Version List=;
  }
  PROPERTIES
  {
    OnRun=BEGIN
          END;

  }
  CODE
  {

    PROCEDURE GetFileEncoding@1(SourceFile@1100409001 : Text) : Text;
    VAR
      Encoding@1100409000 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.Encoding";
      Buffer@1100409002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array";
      Byte@1100409003 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Byte";
      FileStream@1100409004 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.FileStream";
      FileMode@1100409005 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.FileMode";
      b@1100409006 : ARRAY [5] OF Integer;
      i@1100409007 : Integer;
    BEGIN
      Encoding := Encoding.Default;
      Buffer := Buffer.CreateInstance(GETDOTNETTYPE(Byte),5);
      FileStream := FileStream.FileStream(SourceFile,FileMode.Open);
      FileStream.Read(Buffer,0,5);
      FileStream.Close;

      FOR i := 0 TO 4 DO
        b[i + 1] := Buffer.GetValue(i);

      CASE TRUE OF
        (b[1] = HexToDec('0xef')) AND (b[2] = HexToDec('0xbb')) AND (b[3] = HexToDec('0xbf')):
          Encoding := Encoding.UTF8;
        (b[1] = HexToDec('0xfe')) AND (b[2] = HexToDec('0xff')):
          Encoding := Encoding.BigEndianUnicode;
        (b[1] = 0) AND (b[2] = 0) AND (b[3] = HexToDec('0xfe')) AND (b[4] = HexToDec('0xff')):
          Encoding := Encoding.UTF32;
        (b[1] = HexToDec('0xff')) AND (b[2] = HexToDec('0xfe')) AND (b[3] = 0) AND (b[4] = 0):
          Encoding := Encoding.UTF32;
        (b[1] = HexToDec('0x2b')) AND (b[2] = HexToDec('0x2f')) AND (b[3] = HexToDec('0x76')):
          Encoding := Encoding.UTF7;
        (b[1] = HexToDec('0xff')) AND (b[2] = HexToDec('0xfe')):
          Encoding := Encoding.Unicode;
      END;

      EXIT(Encoding.EncodingName);
    END;

    PROCEDURE HexToDec@2(Hex@1100409000 : Text) : Integer;
    VAR
      Convert@1100409001 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Convert";
    BEGIN
      EXIT(Convert.ToInt32(Hex,16));
    END;

    BEGIN
    END.
  }
}

